import com.ls.mybatis.bean.StuInfo;
import com.ls.mybatis.core.SqlSession;
import com.ls.mybatis.core.SqlSessionFactory;
import com.ls.mybatis.core.SqlSessionFactoryBuilder;
import org.junit.Test;

import java.util.HashMap;
import java.util.List;
import java.util.Map;


public class Mytest01 {

    @Test
    /**
     * 测试语句为添加语句，输入值为 对象类型
     */
    public void test1(){
        SqlSessionFactory sqlSessionFactory =
                SqlSessionFactoryBuilder.build("mybatis-config.xml");
        SqlSession sqlSession = sqlSessionFactory.openSession();

        /**
         * 当传入的是对像的时候，可以不按照映射文件中写的中写的sql参数顺序
         * 因为sql会话会直接使用sql语句中的参数名字，通过对象的get方法获取设置的数值，
         * 并且按照sql语句中的这个顺序传给debhelp
         * 也就是说sql语句在写的时候的占位符顺序就是sql语句的执行是参数顺序
         */
        int result1  = sqlSession.update("StuInfo.add", new StuInfo( "赵李懒小姐姐", "12356",
                "伍市镇", 101, "超级一班"));
        System.out.println(result1);
    }

    @Test
    /**
     * 测试跟语句为添加sql语句
     * 输入的值类型为map
     */
    public void test2(){
        SqlSessionFactory sqlSessionFactory =
                SqlSessionFactoryBuilder.build("mybatis-config.xml");
        SqlSession sqlSession = sqlSessionFactory.openSession();

        Map<String, Object> map = new HashMap<String, Object>();
        /**
         * 使用map的时候要注意参数的顺序要和写的sql语句字段顺序一致
         * sql会话对象在处理的时候,是按照map存入的顺序获取值,然后传给dbhelp对象
         * dbhelp按照传入的map参数顺序给sql语句替换值，如果顺序不一样那么存入的数据会
         * 出错，严重的时甚至会导致程序运行终止
         */
        map.put("sname", "美美姨就是我了");
        map.put("cid", "104");
        map.put("tel", "12345678");
        map.put("addr", "伍市镇");
        map.put("cname", "ootd，每日穿搭班");
        int result  = sqlSession.update("StuInfo.add2", map);
        System.out.println(result);
    }

    @Test
    /**
     * 测试语句为更新语句，输入值为 对象类型
     */
    public void test3(){
        SqlSessionFactory sqlSessionFactory =
                SqlSessionFactoryBuilder.build("mybatis-config.xml");
        SqlSession sqlSession = sqlSessionFactory.openSession();

        int result2 = sqlSession.update("StuInfo.update", new StuInfo("罗帅","18570501644",
                "衡阳", 104, 6));
        System.out.println(result2);
    }

    @Test
    /**
     * 测试更新语句为删除语句，输入值为基本类型
     */
    public void test4(){
        SqlSessionFactory sqlSessionFactory =
                SqlSessionFactoryBuilder.build("mybatis-config.xml");
        SqlSession sqlSession = sqlSessionFactory.openSession();
        int result  = sqlSession.update("StuInfo.delete", 8);
        System.out.println(result);
    }

    @Test
    /**
     * 测试多个记录查询，输入值为基本类型
     * 返回值为map类型
     */
    public void test5(){
        SqlSessionFactory sqlSessionFactory =
                SqlSessionFactoryBuilder.build("mybatis-config.xml");
        SqlSession sqlSession = sqlSessionFactory.openSession();
        List<Map<String, Object>> stus = sqlSession.selectList("StuInfo.finds", 101);
        stus.forEach(System.out::println);
    }

    @Test
    /**
     * 测试单个对象的查询，输入值为基本类型
     * 返回值为对象类型
     */
    public void test6(){
        SqlSessionFactory sqlSessionFactory =
                SqlSessionFactoryBuilder.build("mybatis-config.xml");
        SqlSession sqlSession = sqlSessionFactory.openSession();
        StuInfo stuInfo = sqlSession.selectOne("StuInfo.findOne", 104);
        System.out.println(stuInfo.toString());
    }

}
